# facet_wrap()现已简化为单参数dir控制8种布局。
# 新参数采用双字母代码组合（t: 顶, r: 右, b: 底, l: 左），
# 同时定义起始位置和填充方向：首字母决定起始角落（如 br和 rb均从右下角开始）；
# 字母顺序决定填充方向，首字母为 b（底部）→ 从下到上填充；首字母为 r（右侧）→ 从右到左填充。

# "lt"：从左上角开始，按从左到右顺序填充
# "tl"：从左上角开始，按从上到下顺序填充
# "lb"：从左下角开始，按从左到右顺序填充
# "bl"：从左下角开始，按从下到上顺序填充
# "rt"：从右上角开始，按从右到左顺序填充
# "tr"：从右上角开始，按从上到下顺序填充
# "rb"：从右下角开始，按从右到左顺序填充
# 'br"：从右下角开始，按从下到上顺序填充

p <- ggplot(mpg, aes(displ, hwy)) +
  geom_point()

p1 <- p +
  facet_wrap(~ vctrs::vec_group_id(class), dir = "br") +
  labs(title = "dir = 'br'")
p1

p2 <- p +
  facet_wrap(~ vctrs::vec_group_id(class), dir = "rb") +
  labs(title = "dir = 't=rb'")
p2


# facet_wrap()函数本次新增了space参数，
# 用于在特定条件下根据数据范围按比例分配面板空间。
# 该功能原为 facet_grid()独有，
# 但由于 facet_wrap()不共享坐标轴，一直未能实现。
# 现在发现了一种特殊场景可支持此功能：
# 当分面只有一行时：所有面板共享同一 y 轴范围，可按 x 轴数据比例调整列宽度；
# 当分面只有一列时：所有面板共享同一 x 轴范围，可按 y 轴数据比例调整行高度。

ggplot(penguins, aes(bill_dep, bill_len, colour = species)) +
  geom_point(na.rm = TRUE) +
  facet_wrap(~island, scales = "free_x", space = "free_x")

# 新增 layer(layout)参数，用于指导facet系统处理数据的方式，
# 该参数支持以下模式：
# ·Layout=NULL（默认）：按分面变量自动分配数据到对应面板
# ·Layout="fixed"：将数据复制到所有面板，忽略分面变量
# ·Layout=<整数>：将数据强制分配到指定编号的面板

# 仅facet_grid（）额外支持：
# ·layout="fixed_cols"：按列聚合数据，并在该列下面板中重复显示
# ·layout=“fixed_rows"：按行聚合数据，并在诞行下面板中重复显示
ggplot(penguins, aes(bill_dep, bill_len)) +
  # repeat within every row
  geom_point(na.rm = TRUE, colour = "grey", layout = "fixed_rows") +
  # use facetting varables (default)
  geom_point(na.rm = TRUE, layout = NULL) +
  # pick particular panel
  annotate("text", x = I(0.5), y = I(0.5), label = "Panel 6", layout = 6) +
  facet_grid(species ~ island)
